import { Injectable, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { CreateTagDto } from './dto/create-tag.dto';
import { UpdateTagDto } from './dto/update-tag.dto';
import { Tag } from './entities/tag.entity';

@Injectable()
export class TagService {
  constructor(
    @InjectRepository(Tag)
    private tagRepository: Repository<Tag>,
  ) {}

  async create(createTagDto: CreateTagDto): Promise<Tag> {
    // 使用 createTagDto 中的数据创建一个新的 Tag 实体
    const newTag = this.tagRepository.create(createTagDto);
    // 保存到数据库
    await this.tagRepository.save(newTag);
    return newTag;
  }

  async findAll() {
    // 获取所有分类
    return {
      data: {
        tagList: await this.tagRepository.find(),
      },
    };
  }

  async findOne(id: string) {
    // 根据 id 获取单个分类
    const tag = await this.tagRepository.findOne({
      where: { id: id },
    });
    // if (!tag) {
    //   throw new NotFoundException(`Tag with ID "${id}" not found`);
    // }
    return {
      data: tag ?? [],
    };
  }

  async update(id: string, updateTagDto: UpdateTagDto) {
    // 首先检查分类是否存在
    const tag = await this.tagRepository.findOne({
      where: { id },
    });
    if (!tag) {
      throw new NotFoundException(`Tag with ID "${id}" not found`);
    }
    // 更新分类字段
    this.tagRepository.merge(tag, updateTagDto);
    await this.tagRepository.save(tag);
    return {
      data: tag ?? [],
      msg: '更新标签信息成功',
    };
  }

  async remove(id: string) {
    // 首先检查分类是否存在
    const tag = await this.tagRepository.findOne({
      where: { id },
    });
    if (!tag) {
      throw new NotFoundException(`Tag with ID "${id}" not found`);
    }
    tag.is_deleted = true;
    // 根据 id 删除分类
    await this.tagRepository.save(tag);
    return {
      msg: `删除标签${tag.tag_name}成功`,
    };
  }
}
